package com.copa.l1234;

/**
 * @author copa
 * @createDate 2023-02-13 09:10
 * @function 双指针法
 */
public class Test1 {

    public int balancedString(String s) {
        // 我是傻逼，没看到题目要求是替换子串，并不是单一的字符
        // 嘤嘤嘤嘤(╥╯^╰╥)
//        Map<Character, Integer> map = new HashMap<>();

//        map.put('Q', 0);
//        map.put('W', 0);
//        map.put('E', 0);
//        map.put('R', 0);
//
//        for (int i = 0; i < s.length(); i++) {
//            char c = s.charAt(i);
//            map.put(c, map.get(c) + 1);
//        }
//        int balancedNum = s.length() / 4;
//        int result = 0;
//
//        for (Integer value : map.values()) {
//            result += Math.abs(value - balancedNum);
//        }
//        return result / 2;
        // 所以既然是子串，那我直接双指针了
        int[] count = new int[4];
        String title = "QWER";
        int n = s.length();
        for (int i = 0; i < n; i++) {
            count[title.indexOf(s.charAt(i))]++;
        }
        int balancedNum = s.length() / 4;
        if (count[0] == balancedNum && count[1] == balancedNum && count[2] == balancedNum && count[3] == balancedNum) {
            return 0;
        }
        int result = Integer.MAX_VALUE;
        int left = 0, right = 0;
        for (; right < n; right++) {
            count[title.indexOf(s.charAt(right))]--;
            while (left <= right
                    && count[0] <= balancedNum && count[1] <= balancedNum && count[2] <= balancedNum && count[3] <= balancedNum) {
                result = Math.min(result, right - left + 1);
                count[title.indexOf(s.charAt(left++))]++;
            }
        }
        return result;
    }

    public static void main(String[] args) {
        String s = "QQQW";
        System.out.println(new Test1().balancedString(s));
    }
}
